package org.huangrui.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.ai.chat.messages.Message;
import org.springframework.ai.chat.messages.UserMessage;
import org.springframework.ai.chat.model.ChatModel;
import org.springframework.ai.chat.model.ChatResponse;
import org.springframework.ai.chat.model.Generation;
import org.springframework.ai.chat.prompt.Prompt;
import org.springframework.ai.chat.prompt.SystemPromptTemplate;
import org.springframework.ai.openai.OpenAiChatOptions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * @Author hr
 * @Create 2025-11-11 8:59
 **/
@Slf4j
@RestController
public class ChatModelController {
    @Autowired
    private ChatModel chatModel;

    @GetMapping("/chatmodel01")
    public String chatmodel01(@RequestParam(value = "msg", defaultValue = "你是谁") String msg) {
        String call = chatModel.call(msg);
        log.info("call:{}", call);
        return call;
    }

    /**
     * ChatResponse call(Prompt prompt)
     * http://localhost:8001/chatmodel02
     */
    @GetMapping("/chatmodel02")
    public String chatmodel02(@RequestParam(value = "msg", defaultValue = "你是谁") String msg) {
        ChatResponse chatResponse = chatModel.call(new Prompt(msg,
                OpenAiChatOptions.builder()
                        // 可以更换成其他大模型，如Anthropic3ChatOptions亚马逊
                        .model("deepseek-chat")
                        .temperature(0.8)
                        .build()));
        String text = chatResponse.getResult().getOutput().getText();
        log.info("text:{}", text);
        return text;
    }

    // 提示词操作
    @GetMapping("/prompt")
    public String prompt(@RequestParam(value = "name", defaultValue = "小王")
                         String name,
                         @RequestParam(value = "voice", defaultValue = "便宜")
                         String voice) {
        String userText = """
                给我推荐北京的至少三种美食
                """;
        UserMessage userMessage = new UserMessage(userText);
        String systemText = """
                你是一个美食咨询助手，可以帮助人们查询美食信息。
                你的名字是{name},
                你应该用你的名字和{voice}的饮食习惯回复用户的请求。
                """;

        // 使用Prompt Template 设置信息
        SystemPromptTemplate systemPromptTemplate = new SystemPromptTemplate(systemText);
        // 替换占位符
        Message message = systemPromptTemplate.createMessage(Map.of("name", name, "voice", voice));
        // 使用Prompt封装
        Prompt prompt = new Prompt(List.of(message, userMessage));
        // 调用chatModel方法
        List<Generation> results = chatModel.call(prompt).getResults();
        for (Generation result : results) {
            log.info("result:{}", result.getOutput().getText());
        }
        return results.stream().map(result -> result.getOutput().getText()).collect(Collectors.joining());
    }
}
